package com.kingyun.gpsinspection.purificationservice.facade.service.tdm;

import com.kingyun.gpsinspection.purificationservice.facade.model.jsm.EmployeeVo;
import com.kingyun.gpsinspection.purificationservice.facade.model.tdm.ProcessBean;

import java.util.List;

/**
 * Created by liyi on 2017/1/14.
 * BPM流程接口
 */
public interface IBMBPMService {
    /**
     * 获得当前人所属组织的所属作业区的前两个字符
     * @param employeeVo
     * @return
     */
    public String getWorkSpaceNameFirstTwoLetters(EmployeeVo employeeVo);

    /**
     * 开启流程
     *
     * @param url           api的访问url
     * @param bpdId         BPD 标识:以25开头
     * @param snapshotId    Snapshot 标识:以2064开头
     * @param branchId      分支标识::以2063开头
     * @param processAppId  流程应用程序标识:以2066开头
     * @param requestMethod 请求的方式"GET"/"POST"/"PUT"/"DELETE"
     * @param username      用户名
     * @param password      密码
     * @param parameter     参数
     * @return
     */
    String openBPM(String url, String bpdId, String snapshotId, String branchId, String processAppId, String requestMethod, String username, String password, String parameter);


    /**
     * 开启流程
     * 请求：https://192.168.0.200:9443/rest/bpm/wle/v1/process?action=start&bpdId=25.b90b53fd-af89-4016-8eb1-f8de0bf994a9&snapshotId=2064.97ca58c9-1347-4364-ba33-b62e01297f6e&processAppId=2066.8595eceb-25b9-4234-842f-b6fd56ef6c79&parts=all
     * 方法： POST
     *
     *
     * @param employeeVo
     * @param taskType  流程类型
     * @param username  用户名
     * @param password  密码
     * @param parameter 参数
     * @return
     */
    String openBPM(EmployeeVo employeeVo, Short taskType, String username, String password, String parameter);


    /**
     * 完成当前节点，往下一节点扭转
     *
     * @param url           api的访问callURL
     * @param tkiid         任务标识:
     * @param requestMethod 请求的方式"GET"/"POST"/"PUT"/"DELETE"
     * @param username      用户名
     * @param password      密码
     * @param parameter     参数
     */
    String completeTask(String url, String tkiid, String requestMethod, String username, String password, String parameter);

    /**
     * 完成当前节点，往下一节点扭转
     * 请求： https://192.168.0.200:9443/rest/bpm/wle/v1/task/849?action=finish&parts=all
     * 方法： PUT
     * 状态： 200 - OK
     * 结果： 成功
     * {status: "200",
     * data: {...}
     * }
     * 结果：失败
     * {status: "error",
     * Data:{...}
     * }
     *  @param username  用户名
     * @param password  密码
     * @param tkiid     任务标识:
     * @param parameter 参数
     */
    String completeTask(String username, String password, String tkiid, String parameter);

    /**
     * 终止流程
     * @param url           api的访问callURL
     * @param requestMethod 请求的方式"GET"/"POST"/"PUT"/"DELETE"
     * @param username      用户名
     * @param password      密码
     * @param piid          流程实例标识:
     */
    void terminateBPM(String url, String requestMethod, String username, String password, String piid);

    /**
     * 终止流程 请求： https://192.168.0.200:9443/rest/bpm/wle/v1/process/1920?action=terminate&parts=all
     * @param username
     * @param password 密码
     * @param piid
     */
    String terminateBPM(String username, String password, String piid);

    /**
     * 删除流程
     *
     * @param url           api的访问url
     * @param piid          流程实例标识:
     * @param requestMethod 请求的方式"GET"/"POST"/"PUT"/"DELETE"
     * @param username      用户名
     * @param password      密码
     */
    void deleteBPM(String url, String piid, String requestMethod, String username, String password);

    /**
     * 查询流程
     *
     * @param url                 api的访问callURL
     * @param queryName           查询名称:
     * @param selectedAttributes  所选属性:
     * @param interactionFilter   交互过滤器: (待办、已办等)：
     * @param queryFilter         查询过滤器:
     * @param searchFilter        搜索过滤器:
     * @param processAppName      流程应用程序名称:
     * @param sortAttributes      排序属性:
     * @param offset              偏移量:
     * @param size                大小:
     * @param filterByCurrentUser
     * @param requestMethod       请求的方式"GET"/"POST"/"PUT"/"DELETE"
     * @param username            用户名
     * @param password            密码
     */
    String queryBPM(String url, String queryName, String selectedAttributes, String interactionFilter, String queryFilter, String searchFilter, String processAppName,
                    String sortAttributes, String offset, String size, String filterByCurrentUser, String requestMethod, String username, String password);

    /**
     * 查询待办任务
     * 访问url=http://192.168.0.200:9080/rest/bpm/wle/v1/tasks/query/IBM.DEFAULTALLTASKSLIST_75?interactionFilter=ASSESS_AND_WORK_ON&processAppName=%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6%E7%AE%A1%E7%90%86"
     * 访问带版本号的url=http://192.168.0.200:9080/rest/bpm/wle/v1/tasks/query/IBM.DEFAULTALLTASKSLIST_75?interactionFilter=ASSESS_AND_WORK_ON&queryFilter=SNAPSHOT_NAME='v1.3.1'&processAppName=%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6%E7%AE%A1%E7%90%86
     * <p/>
     * 按任务节点ID降序排列
     * https://192.168.0.200:9080/rest/bpm/wle/v1/tasks/query/IBM.DEFAULTALLTASKSLIST_75?interactionFilter=ASSESS_AND_WORK_ON&processAppName=%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6%E7%AE%A1%E7%90%86&sortAttributes=PI_PIID%20desc
     *
     * @param username 用户名
     * @param password 密码
     * @param version  版本
     * @throws Exception
     */
    String queryToDoTask(String username, String password, String version);

    /**
     * 查询指定流程实例ID的待办任务：唯一待办任务
     * https://192.168.0.200:9443/rest/bpm/wle/v1/tasks/query/IBM.DEFAULTALLTASKSLIST_75?interactionFilter=ASSESS_AND_WORK_ON&queryFilter=PI_PIID=ID('806')&processAppName=%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6%E7%AE%A1%E7%90%86
     *
     *
     * @param employeeVo
     * @param username 用户名
     * @param password 用户密码
     * @param version  版本号
     * @param piPiid   流程实例ID
     * @return
     * @throws Exception
     */
    String queryToDoTask(EmployeeVo employeeVo, String username, String password, String version, String piPiid);

    /**
     * 查询代办任务（带分页）
     *
     * @param employeeVo
     * @param username 用户名
     * @param password 用户密码
     * @param queryFilter 查询条件
     * @param limit 每页显示数据条数
     * @param offset 第几条数据开始
     * @return
     */
    String queryToDoTask(EmployeeVo employeeVo, String username, String password, String queryFilter, Integer limit, Integer offset);

    /**
     * 查询代办任务记录总条数
     * 例子：http://192.168.0.200:9080/rest/bpm/wle/v1/tasks/query/IBM.DEFAULTALLTASKSLIST_75/count?interactionFilter=ASSESS_AND_WORK_ON&processAppName=%E4%BB%BB%E5%8A%A1%E8%B0%83%E5%BA%A6%E7%AE%A1%E7%90%86&queryFilter=NAME%20LIKE%20'%E5%B9%B3%E6%9D%BF%E5%A4%84%E7%90%86'
     *
     * @param employeeVo
     * @param username    用户名
     * @param password    密码
     * @param queryFilter 查询条件
     * @return
     */
    String queryToDoTaskCount(EmployeeVo employeeVo, String username, String password, String queryFilter);

    /**
     * 查询公开的流程
     * 请求： https://192.168.0.200:9443/rest/bpm/wle/v1/exposed/process
     * 方法： GET
     * 状态： 200 - OK
     *
     * @param username
     * @param password
     * @return
     */
    String queryExposedProcess(String username, String password);

    /**
     * 根据任务类型查询任务最新版本的对象
     *
     *
     * @param firstTwoLetters
     * @param taskType
     * @param username
     * @param password
     * @return
     */
    ProcessBean queryLatestVersion(String firstTwoLetters, Short taskType, String username, String password);

    /**
     * 遍历list，获得指定程序和流程的最新版本
     *
     * @param firstTwoLetters
     * @param taskType
     * @param list
     * @return
     */
    ProcessBean queryLatestVersion(String firstTwoLetters, Short taskType, List<ProcessBean> list);

    /**
     * 获取版本创建时间最大的bean
     *
     * @param list
     * @return
     */
    ProcessBean getMaxBean(List<ProcessBean> list);

    /**
     * 调用IBM BPM REST API
     *
     * @param urlString     api的访问url
     * @param requestMethod 请求的方式"GET"/"POST"/"PUT"/"DELETE"
     * @param username      用户名
     * @param password      用户密码
     * @return json格式的字符串
     */
    String callRestAPI(String urlString, String requestMethod, String username, String password);

    /**
     * 根据指定id查询代办任务标识
     * @param piid 任务id
     * @return
     */
    String queryBPMByPiid(EmployeeVo employeeVo, String piid);
    /**
     * @param piid    任务标识id
     * @param toUser  要分配的用户
     * @param toGroup 要分配的组
     * @return
     */
    String assignTask(String piid, String toUser, String toGroup);
}
